home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-08-22 | 54.3 KB | 1,849 lines |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CESMouse Tools Library
- With
- Complete Joystick Functions
-
-
-
- Version 1.25 Shareware
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright 1989, 1991. All Rights Reserved.
-
-
- John F. Jarrett
- Computer Engineering Services
- Post Office Box 1222
- Show Low, Arizona 85901
- (602) 367-8996
-
-
-
-
-
-
-
-
-
-
-
-
-
- TABLE OF CONTENTS
-
-
-
-
- Program License ................................ 1
-
- Introduction ................................... 2
-
- Installation ................................... 3
-
- Compiling with Power C ......................... 4
-
- Compiling with Quick C and MS C 6.0 ............ 5
-
- Compiling with Turbo C ......................... 7
-
- Compiling With Quick Basic ..................... 9
-
- Mouse Functions ................................ 11
-
- Example C Program For Mouse Functions .......... 20
-
- Joysticks ...................................... 21
-
- Joystick Functions ............................. 22
-
- Example C Source for Joystick Functions ........ 24
-
- Bug Report Form ................................ 25
-
- Product Registration ........................... 26
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PROGRAM LICENSE
-
-
-
- This manual, as well as all source code and object code is
- copyrighted material and is registered with the United States
- Copyright Office, Copyright 1989, 1991.
-
- You, the original purchaser, do not own this software, but
- you have a non exclusive and non transferrable license to use
- this software on one machine. This software is just like a
- book which cannot be read by another person at the same time.
-
- Therefore, you may use this software on only one machine, or
- one node of a network and make needed back up copies for your
- own archival use. Site licenses and network licenses are
- available. Making copies for another person is not allowed,
- and is a violation of the United States Copyright Law.
-
- You may combine the libraries, routines, functions and header
- files into your own executable computer programs that you
- write, as long as no source code of the functions within this
- library are released and your program is compiled and linked,
- without paying any royalties whatsoever to Computer
- Engineering Services.
-
- Computer Engineering Services makes no warranty expressed or
- implied of any kind as to the suitability, merchantability or
- applicability of this software for any purpose. Computer
- Engineering Services is not liable for any damages incurred
- arrising out of the use or inability to use this software by
- you, others or otherwise. Computer Engineering Services only
- warrants that the magnetic media on which this software
- resides is free from defects in material and workmanship for
- a period of ninety days IF recorded and distributed by
- Computer Engineering Services.
-
- Any reference to Turbo C, Borland C, Quick C, MSC, MS-DOS,
- MicroSoft Mouse or Quick Basic, Power C, PC-DOS, Kraft Mouse
- or Econo Mouse, or others, are for reference only, and are
- U.S. Registered Trademarks of; Borland International,
- Microsoft Corporation, Mix Software, International Business
- Machines, (IBM), and Kraft Systems Inc.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
- INTRODUCTION
-
-
- Ever since learning to write programs for a computer, I
- learned the value of "tools" that have assisted me in my
- endeavors. Often I purchase "tools" to assist me, such as a
- window tool kit, communications tool kit, graphics tool kit
- and the like. There are many programmers tool kits available.
-
- My biggest problem has been coming up with the price for some
- of the tool kits and then having to purchase more functions
- and routines than I really want or need.
-
- To this end, I have had to write many of my own tool kits, or
- canned functions that I can use in my day-to-day programming.
- Since I have yet to see a library of only mouse functions all
- by themselves, I created just that. The C.E.S. Mouse Tools
- Library. This library has over fifty functions that deal only
- with MicroSoft compatible mice. These functions give you
- almost complete control over mouse motion and sensing in all
- of your programs.
-
- Since nearly all mice sold for IBM compatible computers
- running under PC-DOS or MS-DOS are compatible with the
- defacto MicroSoft Mouse Driver, almost any mouse driver and
- mouse will function with these routines. However there are
- some functions that will only work with the MicroSoft Mouse
- Driver.
-
- Since we are dealing with secondary (mouse) input for the
- computer, the joysticks have also been a problem to program.
- BASIC has joystick functions, but not C or Pascal. I have
- thrown them in for C programmers, because many still play
- with joysticks.
-
- The mouse and joystick routines are written in C and are all
- debugged and ready for you to use. All of the functions are
- optimized for speed, not size. The functions are all designed
- to be almost fool-proof so that a newcomer as well as an "old
- timer" can easily integrate these functions into his or her
- program.
-
- Presently, the library is compiled for the following
- compilers:
-
-
- Borland Turbo C version 2.0, Turbo C++ and Borland C++
- Microsoft Quick C version 1.0
- MicroSoft C 6.0
- Mix Power C Version 2.0
-
-
- GOOD LUCK!
-
-
- John F. Jarrett
- Computer Engineering Services
-
-
- 2
-
-
-
-
-
-
- INSTALLATION
-
-
-
- Installation of the CES mouse and joystick library functions
- is straight forward. The include files, cesjoy.h and
- cesmouse.h should be copied into the "include" subdirectories
- of MicroSoft Quick C, c 6.0 and Borland Turbo C, and the
- library files, mouseqcx.lib, mousemsx.lib and mousetcx.lib,
- should be placed into the "lib" subdirectories of each, and x
- is the memory model of the libraries. (The ShareWare version
- ONLY includes the medium memory model).
-
- For Mix Power C, the include and library files can be placed
- in the same Power C directory with all of the other files. It
- may also be a good idea, if you have version 2.0 of Power C,
- to compile the include, (.h) files into the .hhh header file
- using the fasthdr.exe utility supplied with version 2.0.
-
- On the distribution disk you will find in the root directory
- the include files, cesjoy.h, cesmouse.h, cesmouse.bas,
- cesmouse.doc, (this file), and a read.me file that includes
- any last minute changes in the documentation or files
- included on the disk.
-
- There will be directories for each make or version of a
- supported compiler. These directories are;
-
-
- POWER_C includes libraries for version 2.0
- QUICK_C includes libraries for version 1.0 only
- TURBO_C includes libraries for version 2.0 only
- EXAMPLES contains source code for examples and executables
- C_SOURCE contains the C source code for the functions
-
-
- The C source for the examples can also be found under the
- SOURCE subdirectory. The manual generally only lists the
- Turbo C source code. Each file in the library as well as each
- example is written to be as portable as possible for each
- compiler, but differences do exist.
-
- The cesmouse.bas file is an example include file for using
- some of the library functions with QuickBasic and it is not a
- supported feature of the CESMouse Tools Library.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 3
-
-
-
-
-
-
- COMPILING WITH POWER C
-
-
-
- To compile your programs with the CESmouse or CESjoystick
- libraries with Mix Power C is easy.
-
- Each of the library modules for Power C follow the following
- format:
-
-
- mousepcX.lib (for mouse functions) or;
- joypcX.lib (for joystick functions)
-
-
- The "pc" included in the file name stands for Power C and the
- X stands for the memory model, small, medium or large.
-
- The easiest way to compile your programs with Power C is to
- first compile your file;
-
-
- pc /ms mustest.c to compile a small memory model program.
-
- Next link your file with the appropriate library;
-
- pcl mustest,,,mousepcs.lib; "s" for small memory library.
-
-
- Your exucutable file will be named mustest.exe. You may use
- any of the compiler/linker options that you wish.
-
- Should you have the files in other directories, other than
- the default Power C directory, make sure you include the
- proper DOS paths in the compiler and linker command line, ie;
-
-
- pc \c_work\mustest.c
- pcl \c_work\mustest ;\compinc\mouspc13.mix
-
-
- Lastly, make sure that your program source includes the
- proper header files and any dos path to them. As an example;
-
-
- #include <cesjoy.h> (if in the current Power C directory),
- or;
-
- #include <\c_work\cesmouse.h> (if the file is not in the
- default Power C directory).
-
-
- These include files contain the function prototypes and any
- declarations for extern variables.
-
-
-
-
-
- 4
-
-
-
-
-
-
- COMPILING WITH QUICK C
-
-
-
- To compile your programs with the CESmouse or CESjoystick
- libraries with Quick C is a little more time consuming.
-
- Each of the library modules for Quick C follow the following
- format:
-
-
- mouseqcX.lib (for mouse functions) or;
-
- joyqcX.lib (for joystick functions)
-
-
- The "qc" included in the file name stands for Quick C and the
- X stands for the memory model. At the present time, the CES
- mouse and joystick libraries only support version 1.0 of
- Quick C. However, there should be little problem in using the
- compiled libraries with the newer versions of Quick C. The
- CES mouse and joystick libraries support all of the memory
- models supplied with Quick C version 1.0.
-
- The easiest way to compile and link your Quick C programs is
- as follows;
-
-
- qcl /As mustest.c /link mouseqcs.lib; (and any other needed
- libraries) This is a compiled small memory model executable.
-
-
- If you seperatly compile and link your file, you may now link
- the file using standard linker syntax.
-
-
- link mustest,,,mousqc1s.lib;
-
-
- Your exucutable file will be named mustest.exe. You may use
- any of the compiler/linker options that you wish.
-
- Should you have the files in other directories, other than
- the default Quick C directory, make sure you include the
- proper DOS paths in the compiler and linker command line, ie;
-
-
- qcl /As /c \c_work\mustest.c (/c = compile only)
- link \c_work\mustest,,,\compinc\mousecs.lib;
-
-
- Lastly, make sure that your program source includes the
- proper header files and any dos path to them. As an example;
-
-
- #include <cesjoy.h> (if in the current Quick C directory and
- PATH), or;
-
-
- 5
-
-
-
-
-
-
- #include "\c_work\cesmouse.h" (if the file is not in the
- default Quick C directory. Make sure that LIB= is set in
- your autoexec.bat).
-
- These include files contain the function prototypes and any
- declarations for external variables.
-
- The Quick C and MSC, optimizing compiler, use the same
- command line syntax, except that the MSC version uses CL
- instead of the Quick C command line syntax of QCL.
-
- The library names for MicroSoft C 6.0 are;
-
- mousemsX.lib, where X is the memory model and the ms stands
- for MicroSoft. The tiny and small libraries are the same, so
- use the small, and the large and huge are the same, so use
- the large model when linking.
-
- A Microsoft C example would be;
-
- cl /AL /Ot mustest.c (large model)
- link mustest.c,,,mouusemsl.lib
-
- Remember to use the /A option to specify the proper memory
- model, ie /As or /Al, etc. Use the proper CES library memory
- model denoted by the s through l at the end of the library
- name and lastly make sure you have included in your setup of
- Quick C, version 1.0, all of the needed memory models that
- you will use. Newer versions of Quick C allow you to use all
- the memory models from the interactive environment.
-
-
- MAKING A QUICK LIBRARY OF THE CES FUNCTIONS
-
-
- If you wish to make a Quick Library of the CES Mouse or
- Joystick functions, the following command line syntax is
- provided.
-
-
- link \lib\quicklib+mouseqcm.lib,mouseqcm.qlb /I /Q;
-
- link \lib\quicklib+joyqcm.lib,joyqcm.qlb /I /Q;
-
-
- The /I option displays linker information as the linker links
- the library into a Quick Library, the /Q option.
-
- By making a Quick Library, you can use the CES functions in
- the interactive environment, but the library is put in RAM at
- the time you load qc, so you have less room in memory for
- your compiled programs.
-
-
-
-
-
-
-
- 6
-
-
-
-
-
-
- COMPILING WITH TURBO C
-
-
-
- To compile your programs with the CESmouse or CESjoystick
- libraries with Borlands Turbo C is easy.
-
- Each of the library modules for Turbo C follow the following
- format:
-
-
- mousetcX.lib (for mouse functions) or;
-
- joytcX.lib (for joystick functions)
-
-
- The "tc" of course stands for Turbo C and the X stands for
- the memory model being used which is either "s" for the small
- memory model, "m" for the medium memory model, and so on. All
- of the memory models are fully supported in the libraries.
-
- The easiest way to compile your programs within the
- interactive environment of Turbo C for all versions is to
- create a a project file and include it in the interactive
- environment. An example would be for the following project
- file, mustest.prj;
-
-
- mustest.c
- mousets.lib
-
-
- This project file will compile the source file, mustest.c and
- include the small mouse library for version 2.0 of Turbo C.
- The executable file will be named mustest.exe.
-
- Should you have the files in other directories, other than
- the default Turbo C directories, make sure you include the
- proper DOS paths in the project file, ie;
-
-
- \c_work\mustest.c
- \complibs\moustcs.lib
-
-
- Lastly, make sure that your program source includes the
- proper header files and any dos path to them. As an example;
-
-
- #include <cesjoy.h> (if in the current Turbo C directory),
- or;
-
- #include "\c_work\cesmouse.h" (if the file is not in the
- default Turbo C directory).
-
- The include files contain the function prototypes and any
- declarations for extern variables.
-
-
- 7
-
-
-
-
-
-
- If you use the Turbo C command line compiler, you may compile
- your programs with these libraries in the following manner
- which assumes that all of the compiler libraries are in the
- proper Turbo C subdirectories.
-
-
- tcc -ms mustest.c moust20s.lib
-
-
- Any of the allowable compiler/linker options can be used. A
- recommended set of options would be -G for size optimization,
- and of course the -ms tells the compiler to use the small
- memory model and of course you must use the small library,
- mousetcs.lib.
-
- The Turbo C++ compiler is identical to the Turbo C compiler
- and the libraries are fully functional with the new Turbo C++
- when compiling a standard C program.
-
- The new Borland C++ compiler syntax is identical except that
- the command line compiler is bcc instead of tcc. All other
- options are the same and the libraries are fully functional
- as is with Borland C++.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8
-
-
-
-
-
-
- COMPILING WITH QUICK BASIC
-
-
-
- To compile your programs with the CESmouse library with Quick
- Basic is as easy as compiling your C programs with Quick C.
-
- The library module is the MicroSoft Quick C medium memory
- library and it has the following format;
-
-
- mouseqcm.lib
-
-
- The easiest way to compile and link your Quick Basic programs
- is separately using the command line syntax. First compile
- your Quick Basic program using any of the QB command line
- options, such as;
-
-
- qb moustest.bas (source is not included, example only)
-
-
- Next, you must link your compiled file, now moustest.obj, as
- follows;
-
-
- link moustest,,,brun40.lib mouseqcm.lib
-
-
- The above example will create moustest.exe, a stand alone
- executable program. If you eliminate brun40.lib, you must
- have brun40.exe on the disk or in the path when you run
- moustest.exe. The .lib extensions can be omitted.
-
- One thing to remember is ALWAYS put mousqbc4.lib LAST on the
- command line. Quick Basic must search BASIC libraries first.
-
- Should you have the files and libraries in other directories,
- other than the default Quick Basic directory, make sure you
- include the proper DOS paths in the compiler and linker
- command line, ie;
-
-
- qb \bas_work\moustest.bas
- link \bas_work\moustest,,,\baslibs\mouseqcm.lib
-
-
-
- Another alternative is to list the needed directories in the
- Quick Basic LIB environment variable. See your Quick Basic
- reference manual for instructions on setting this environment
- variable.
-
-
-
-
-
-
- 9
-
-
-
-
-
-
- Lastly, make sure that your Basic programs include the header
- file, cesmouse.bas, and any paths to it. As an example;
-
-
- REM $INCLUDE 'cesmouse.bas' or,
- ' $INCLUDE '\bas_work\cesmouse.bas'
-
-
- The metacommand $INCLUDE must be on a REMark line.
-
- Remember that the sample include file, cesmouse.bas, is only
- an example for you to expand upon. Quick Basic useage of this
- C library is not supported.
-
-
-
- MAKING A QUICK BASIC LIBRARY OF THE CES MOUSE FUNCTIONS
-
-
- If you wish to make a Quick Library of the CES Mouse
- functions, the following command line syntax is provided, (as
- well as a batch, (.BAT), file on the distribution disk);
-
-
- link /Q mouseqcm.lib,mousqbc4.qlb,,bqlb40.lib;
-
- Other link options, such as /I, can be used. (The /I option
- gives you information as you link the file).
-
- By making a Quick Library, you can use the CES Mouse
- functions in the interactive environment, but the library is
- put in RAM at the time you load qb, by specifying a quick
- library. You will have less room in memory for your compiled
- programs.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 10
-
-
-
-
-
-
- MOUSE FUNCTIONS
-
-
- The mouse function header or include file consists of the
- following function definitions, which can be seen by typing
- from the command line;
-
- C>type cesmouse.h
-
-
- /* Mouse functions header file */
- /* Copyright 1989, 1991, Computer Engineering Services */
-
- void showmouse(void);
- void hidemouse(void);
- void posmouse(int mouseX, int mouseY);
- void setmousetrack(int Xtrack, int Ytrack);
- void setmousespeed(int speed);
- void mousegraphcurs(int hspot, int vspot, int cursor);
- void mousetextcurs(int curstype, int scrnmask, int cursmask);
- void penemulON(void);
- void penemulOFF(void);
- void cagemouse(int ulX, int ulY, int lrX, int lrY);
- void cagehoriz(int lft, int rgt);
- void cagevert(int top, int bot);
- void mousewindoff(int ulX, int ulY, int lrX, int lrY);
- void savemousedrvr(int *mdrvrbuff);
- void restoremousedrvr(int *mdrvrbuff);
- void setcrtpage(int page);
- void assignmbtn(int btn, int key);
- void setlang(int lang);
- void enablemdrvr(void);
- void setallscales(int Xtrack, int Ytrack, int speed);
-
- int resetmouse(void);
- int mousedrvr(void);
- int buttons(void);
- int lftbutton(void);
- int ctrbutton(void);
- int rgtbutton(void);
- int mousecursX(void);
- int mousecursY(void);
- int sensemouse(int ulX, int ulY, int lrX, int lrY);
- int sensetop(int top);
- int sensebottom(int bottom);
- int senseleft(int left);
- int senseright(int right);
- int mousetrackX(void);
- int mousetrackY(void);
- int getmousespeed(void);
- int getmouseBPXinfo(int button);
- int getmouseBPYinfo(int button);
- int getmouseBRXinfo(int button);
- int getmouseBRYinfo(int button);
- int mouseXcnt(void);
- int mouseYcnt(void);
- int getmdrvrstorage(void);
-
-
- 11
-
-
-
-
-
-
- int getcrtpage(void);
- int disablemdrvr(void);
- int getmversion(void);
- int getmtype(void);
- int getmirq(void);
- int mdrvrreset(void);
- int getlang(void);
-
- int lastMX, lastMY, Xcount, Ycount, btnrel, btnpress, mbtns;
-
-
- There are several global variables defined in the cesmouse.h
- mouse header file so you need to ensure that your programs do
- not use those variable names, which are;
-
- lastMX
- lastMY
- Xcount
- Ycount
- btnrel
- btnpress
- mbtns
-
-
- All of your programs that will use mouse functions must
- include the cesmouse.h header of include file, such as;
-
- #include <cesmouse.h>
-
- and any path to the file such as;
-
- #include "\c_work\cesmouse.h"
-
- The example C source code throughout this chapter summarize
- all of the functions, usage and global variables. The first
- few functions are the most commonly used and right after is
- the first example C source code.
-
-
- void showmouse(void);
-
- This function displays the mouse cursor at the positions
- specified by posmouse(). If posmouse() is not used, the
- defaults are assumed and the mouse cursor is displayed in the
- center of your screen.
-
-
- void hidemouse(void);
-
- When this function is called, the mouse cursor disappears.
- You can make it reappear by using showmouse().
-
-
-
-
-
-
-
-
- 12
-
-
-
-
-
-
- void posmouse(int mouseX, int mouseY);
-
- The posmouse function will position the mouse cursor at the
- mouseX, or X coordinate and at the mouseY, or Y coordinate on
- your screen. You can move the mouse cursor all over the
- screen by using this function.
-
- If you are programming an application for an eighty column
- text screen, multiply the row and column by eight, (8), to
- get the proper screen position. The following example will
- position the text mouse cursor at screen position row 5
- column 39;
-
- posmouse((8 * 39), (8 * 5));
-
- In graphics mode, simply specify the proper coordinate. 0,0
- is always the upper left hand corner.
-
-
- void setmousetrack(int mouseX, int mouseY);
-
- This function sets the tracking ratio or scaling of the mouse
- in both the X and the Y axis.
-
-
- void setmousespeed(int speed);
-
- This function sets the double speed threshold of the mouse.
- By setting this number higher, the mouse cursor will move
- more quickly across the screen. The useful range seems to be
- between 300 and 900.
-
-
- void setmousegraphcurs(int hspot, int vspot, int cursor);
-
- This function sets the mouse graphics cursor to a different
- shape. Int hspot and int vspot is the X and Y hot spot, or
- the main focal point of the cursor in pixels. Int cursor is
- the defined cursor. To define the cursor, one must keep in
- mind the cursor screen mask, or I like to think of it as the
- "shadow" and the cursor mask, which is actually the complete
- outline of the cursor. The following is given as an example;
-
- static int hand[] =
- {
- /* cursor screen mask */
-
- 0xE1FF /* 1110000111111111 */
- 0xE1FF /* 1110000111111111 */
- 0xE1FF /* 1110000111111111 */
- 00E1FF /* 1110000111111111 */
- 0xE1FF /* 1110000111111111 */
- 0xE000 /* 1110000000000000 */
- 0xE000 /* 1110000000000000 */
- 0xE000 /* 1110000000000000 */
- 0x0000 /* 0000000000000000 */
- 0x0000 /* 0000000000000000 */
-
-
- 13
-
-
-
-
-
-
- 0x0000 /* 0000000000000000 */
- 0x0000 /* 0000000000000000 */
- 0x0000 /* 0000000000000000 */
- 0x0000 /* 0000000000000000 */
- 0x0000 /* 0000000000000000 */
- 0x0000 /* 0000000000000000 */
-
- /* cursor mask */
-
- 0x1E00 /* 0001111000000000 */
- 0x1200 /* 0001001000000000 */
- 0x1200 /* 0001001000000000 */
- 0x1200 /* 0001001000000000 */
- 0x1200 /* 0001001000000000 */
- 0x13FF /* 0001001111111111 */
- 0x1249 /* 0001001001001001 */
- 0x1249 /* 0001001001001001 */
- 0x1249 /* 0001001001001001 */
- 0xF249 /* 1111001001001001 */
- 0x9001 /* 1001000000000001 */
- 0x9001 /* 1001000000000001 */
- 0x9001 /* 1001000000000001 */
- 0x8001 /* 1000000000000001 */
- 0x8001 /* 1000000000000001 */
- 0x8001 /* 1000000000000001 */
- 0xFFFF /* 1111111111111111 */
- };
-
- /* set the hspot to 5 and the vspot top 0 */
- /* and set the cursor */
-
- mousegraphcurs(5,0,*hand);
-
- A bit complex, but can be done if you can convert binary to
- hexadecimal. A piece of graph paper is really handy.
-
-
- void setmousetextcurs(int curstype, int scrnmask, int
- cursmask);
-
- This function is used to set the mouse cursor in text mode as
- either a software cursor, (int curstype = 0), or as a hard
- ware cursor, (int curstype = 1), as well as the foreground,
- background colors, whether the cursor blinks or doesn't.
-
- The following sets the text cursor so that it will invert the
- forground and background colors;
-
- setmousetextcurs(0,0xFFFF,0x7700);
-
- The following turns OFF the hardware cursor;
-
- setmousetextcurs(1,16,0);
-
- Note the use of both decimal and hex which is OK.
-
- The full use of the hardware and software text cursors is
-
-
- 14
-
-
-
-
-
-
- beyond the scope of this library. For further information on
- both graphics and text cursors, please see the Microsoft
- Mouse Programmers Reference.
-
- void penemulON(void);
- void penemulOFF(void);
-
- By default, the mouse emulates a lightpen and can be used
- with programs that once upon a time used light pens. These
- functions can turn such emulation on or off.
-
-
- void cagemouse(int ulX, int ulY, int lrX, int lrY);
-
- This function will "cage the mouse" within the specified
- screen coordinates which make sort of a "window" of mouse
- movement. ulX and ulY are the upper left X and Y screen
- coordinates and lrX and lrY are the lower right X and Y
- coordinates.
-
-
- void cagehoriz(int lft, int rgt);
- void cagevert(int top, int bot);
-
- These functions keep the mouse from going above, or below, or
- to the left or to the right of the specified coordinates.
- cagemouse uses these routines to cage the mouse within an
- entire "window".
-
-
- void mousewindoff(int ulX, int ulY, int lrX, int lrY);
-
- This function is similar to cagemouse, but when the limits of
- the defined "window are exceeded, the mouse turns off.
- Showmouse must be called to make the mouse reappear. Set the
- coordinates of where you want the mouse to appear first using
- posmouse.
-
-
- void savemousedrvr(int *mdrvrbuff);
- void restoremousedrvr(int *mdrvrbuff);
- int getmdrvrstorage(void);
-
- These functions are used to save the mouse driver variables
- and to restore the mouse driver variables. You can get the
- size of a buffer needed by calling get mdrvrstorage(); and
- then create a buffer dimensioned to the needed size and and
- then call the above functions with a pointer to your
- dimensioned buffer. An example;
-
- int mousebuff[getmdrvrstorage()];
- savemousedrvr(*mousebuff);
- {
- other code
- {
- restoremousedrvr(*mousebuff);
-
-
-
- 15
-
-
-
-
-
-
- void setcrtpage(int page);
- int getcrtpage(void);
-
- This function sets the virtual screen page number that the
- mouse is functioning on. This is useful in graphics
- programming where numerous pages can be stored and used via
- hardware. The function getcrtpage returns the current screen
- page.
-
-
- void assignmbtn(int btn, int key);
-
- This function will assign a mouse button a specific keyboard
- key, such as 13, (a carriage return and line fees), when that
- specified button is pressed, or combination of buttons. This
- function uses the buttons() function and the character must
- be specified in ASCII. The character is printed to standard
- out.
-
-
- void setlang(int lang);
-
- This function is only useful with the genuine Microsoft Mouse
- Driver and sets the foreign language useage of that driver
- for its messages. The following is a summation;
-
- 0 = English
- 1 = French
- 2 = Dutch
- 3 = German
- 4 = Swedish
- 5 = Finnish
- 6 = Spanish
- 7 = Portuguese
- 8 = Italian
-
-
- void enablemdrvr(void);
- int disablemdrvr(void);
-
- These functions enable, (enablemdrvr();) the mouse driver
- after a call to disablemdrvr(). When you disable the mouse
- driver, the mouse will not work at all. The function
- disablemdrvr(); returns either a 1 for successful completion
- or a 0 for unsuccessful completion or disabling of the
- driver.
-
-
- void setallscales(int Xtrack, int Ytrack, int speed);
-
- This function sets all of the scales for the mouse within one
- function. This is a combination of setmousetrack and
- setmousespeed.
-
-
-
-
-
-
- 16
-
-
-
-
-
-
- int mousedrvr(void);
-
- This function should be the first mouse function called in
- your program to check and see if the mouse driver has been
- loaded. If the driver is present in memory, the function
- returns an integer value of 1, or true. If the driver is not
- present in memory, the integer value returned is 0, or false.
-
-
- int resetmouse(void);
-
- This function should be the first, and almost last, function
- called in your program. This function resets all of the
- values of the mouse driver to their default values and it
- also returns the number of mouse buttons available on your
- mouse. This value is usually 2 or 3 as the MicroSoft Mouse
- has two buttons, while the Kraft Mouse, and others, have
- three buttons. This value is set in global variable mbtns.
-
- The standard defaults for most mouse drivers are positioning
- the cursor in the center of the screen with a standard
- reverse video software cursor, and a slanted graphics arrow
- cursor in graphics mode with light pen emulation on.
-
- This function is equal to Mouse Function 0 in the MicroSoft
- Mouse Programmers Reference Manual (as well as others mouse
- programmers manuals). For other default values, please refer
- to the MicroSoft Mouse Driver Programmers Reference Manual as
- well as other mouse driver manuals as there are subtle, (yet
- usually negligible), differences.
-
-
- int buttons(void);
-
- This function returns an integer value of between 0 and 7. A
- 0 means that no button were pushed. On a three button mouse,
- the left button will return a 1. The center button will
- return a 4 and the right button will return a 2. If you push
- a couple buttons, the values are added. All three buttons
- pushed will return 7.
-
-
- int lftbutton(void);
-
- This function will return a 1 when the left mouse button is
- pushed.
-
-
- int ctrbutton(void);
-
- This function will return a 1 when the center button is
- pushed.
-
-
-
-
-
-
-
- 17
-
-
-
-
-
-
- int rgtbutton(void);
-
- This function will return a 1 when the right button is
- pushed.
-
-
- int mousecursX(void);
-
- This function returns the X, (horizontal), position of the
- mouse cursor. When in eighty column text mode, divide the
- returned value by 8 to get the cursor location. In forty
- column mode, divide the number by 16. Otherwise, in graphics
- mode, the number returned is the position. This value is
- stored in the global variable lastMX.
-
-
- int mousecursY(void);
-
- This function returns the Y, (vertical), position of the
- mouse cursor. All of the returns are the same as for
- mousecursX(). This value is stored in the global variable
- lastMY.
-
-
- int sensemouse(int ulX, int ulY, int lrX, int lrY);
- int sensetop(int top);
- int sensebottom(int bottom);
- senseleft(int left);
- senseright(int right)
-
-
- These functions all return either a 0 for NOT being past that
- specified portion of the screen and a 1 should they be past
- the specified portions or coordinates of the screen.
-
- The function sensemouse sets up a window specified by ulX and
- ulY, the upper left and right coordinates, and lrX and lrY,
- the lower right X and Y coordinates.
-
- The other return the same when either top, bottom, left or
- right are specified.
-
- int mousetrackX(void);
- int mousetrackY(void);
- int getmousespeed(void);
-
- These functions return the tracking, scaling or the double
- speed threshold of the mouse as previously set.
-
-
- int getmouseBPXinfo(int button);
- int getmouseBPYinfo(int button);
-
- These functions return the X or Y coordinates of the mouse
- when the mouse button, 1, 4, or 2 as specified under
- buttons();, has been pushed. The number of times the button
- has been pushed is stored in the variable btnpress.
-
-
- 18
-
-
-
-
-
-
- int getmouseBRXinfo(int button);
- int getmouseBRYinfo(int button);
-
-
- These functions are identical to getmouseBPXinfo and
- getmouseBPYinfo except that the button releases are returned
- in global variable btnrel.
-
-
- int mouseXcount(void);
- int mouseYcount(void);
-
- These functions return the accumulated mouse counts since the
- last time any of these functions was called. Negative number
- indicate leftward movement for the Xcount and upward movement
- for the Ycount. These values are stored in the associated
- variables xcount and ycount.
-
- NOTE... The following functions are only available on the
- genuine Microsoft Mouse Driver.
-
-
- int getmversion(void);
-
- This function returns the mouse driver version number. 6.10
- will return as 60789 or similar.
-
-
- int getmtype(void);
-
- This function will return the mouse type as follows;
-
- 1 indicates a bus mouse
- 2 indicates a serial mouse
- 3 indicates an InPort mouse
- 4 indicates a PS-2 mouse
- 5 indicates an HP mouse
-
-
- int getmirq(void);
-
- This function returns the hardware interrupt being used by
- the mouse and mouse driver.
-
-
- int mdrvrreset(void);
-
- This function ONLY resets the mouse driver. A 1 being
- returned means success and a 0 means a failure to reset.
-
-
- int getlang(void);
-
- This function returns the language being used as described in
- the functionsetlang();
-
-
-
-
- 19
-
-
-
-
-
-
- EXAMPLE C SOURCE FOR MOUSE LIBRARY
-
-
-
- #include <conio.h>
- #include <stdlib.h>
- #include <cesmouse.h>
-
- main()
- {
- int lft,ctr,rgt,mx,my,but;
-
- cprintf("PC Mouse Test\n");
- cprintf("Press Any Key to Exit\n\n");
-
- /* Check for the Mouse Driver */
- if (mousedrvr() == 0)
- {
- cprintf("Mouse Driver Not Installed\n\n");
- exit(1);
- }
-
- /* Reset the mouse.. All registers to '0' */
- resetmouse();
-
- /* Position the Mouse X = 40, Y = 12 */
- posmouse(320,96);
-
- /* Show the Mouse */
- showmouse();
-
- /* Output Mouse Button Values */
- for(;;)
- {
- lft = lftbutton();
- ctr = ctrbutton();
- rgt = rgtbutton();
- mx = mousecursX();
- my = mousecursY();
- but = buttons();
-
- if (kbhit()) break;
- }
- /* Hide the Mouse */
- hidemouse();
-
- /* Reset the Mouse */
- resetmouse();
-
- exit(0);
- }
-
-
-
-
-
-
-
-
- 20
-
-
-
-
-
-
- JOYSTICKS
-
-
-
- Joysticks are still used by game players and writers. They
- are dependant on the timing of a one shot pulse into the
- joystick which is triggered by one of the joystick functions.
- The time it takes for a specific bit to go, after firing of
- the one shot pulse from a logical 0 to a logical 1, back to a
- logical 0 gives us the approximate position of the joystick.
- This is all dependant upon the resistance in the joystick,
- ie, the X-Y axis variable resistors in the joystick.
-
- The function fires the one shot and continuously checks the
- appropriate bit for X or Y or joystick 1 or joystick 2. When
- it returns to a logical 0, the function is exited. The time,
- or number returned, is actually the number of iterations, or
- loops that the function performed prior to the bit going to a
- 0. This number gives a relative position of the joystick. All
- the way to the right on the X axis returns the X axis highest
- number, while all the way down on the Y axis returns the Y
- axis highest number.
-
- For the functions that read the X and Y axis of the joystick,
- remember: the value returned is only a relative positioning
- of the joystick. In the lower values, 4 to 10 being returned
- is common. The highest values are very dependant upon the
- type and speed of your computer as well as the speed of your
- compiled program, which is compiler dependant. Values
- returned can be from 150 to over 500, again depending upon
- all the variables.
-
- Using Power C and a 12 Mhz 286 machine, the high end was in
- the mid hundreds. Using Turbo C, the higher values returned
- were in the five hundreds, so compilers are different.
-
- The IBM AT and compatibles have routines written in their
- bios which will read the joystick ports connected to their
- bus. Since there is no way of knowing what machine your
- finished programs may be run on, the functions will operate
- in the same fashion on any machine, returning a RELATIVE
- POSITIONING of the joystick along its X or Y axis.
-
- One of the first things that should be done in a program that
- uses the joysticks is to call the getjoyAX and getjoyAY, as
- well as the other two 'get' functions if a second joystick is
- to be used, and ask the user to "CENTER YOUR JOYSTICK AND
- PRESS ENTER", or similar routine. By doing this, you can get
- the returned value of the center position of the joystick,
- center X and center Y, and assign them to a variable so that
- twice center X is at the far right, and twice center Y is all
- the way down. All the way up, Y should be around 0 to 10 and
- all the way to the left, X should also be around 0 to 10.
-
-
-
-
-
-
- 21
-
-
-
-
-
-
- JOYSTICK FUNCTIONS
-
-
-
- The joystick header or include file simply consists of the
- following, as can be seen by typing from the command line;
-
- C>type cesjoy.h
-
-
- /* Joystick routines header file */
- /* Copyright 1989 Computer Engineering Services */
-
-
- int getjoyAX(void);
- int getjoyAY(void);
- int getjoyAB1(void);
- int getjoyAB2(void);
- int getjoyBX(void);
- int getjoyBY(void);
- int getjoyBB1(void);
- int getjoyBB2(void);
- int joyport(void);
-
-
- There are no global variables defined in the cesjoy.h
- joystick header file. All of your programs that will include
- joystick functions must include cesjoy.h, such as;
-
-
- #include <cesjoy.h>
-
- and any path to the file such as;
-
-
- #include <\c_work\cesjoy.h>
-
- The example C source code included at the end of this chapter
- summarizes all of the functions and useage.
-
-
- int joyport(void);
-
- This function checks to see if a game port adapter is
- included in the system bus. Simply, this function checks the
- the lower byte at location 201 hex and checks to see if the
- top four bits, bit 4, 5, 6, and 7 are at a logic 1, and
- checks the bottom four bits, 0, 1, 2, and 3 to see if they
- are at a logic zero. If all of these conditions are met,
- there is a gane port adapter installed in any class of
- machineand returns true or a 1. If there is no game port
- installed or should you have a faulty joystick connected, or
- if a button is pressed, it will return a 0.
-
- This function only returns an integer, either a 1, true,
- should a game port be installed, or a 0, false, should a game
- port not be installed or if a button is pressed or defective
-
-
- 22
-
-
-
-
-
-
- joystick is installed.
-
-
- int getjoyAX(void);
-
- This function returns the relative position of the primary
- joystick, (if you are using only one, this is the primary
- joystick), along its X axis. Returns a lower integer value
- when moved to the right and a higher value when moved to the
- left.
-
-
- int getjoyAY(void);
-
- This function returns the relative position of the primary
- joystick along its Y axis. Returns a lower integer value when
- moved to the top and a higher value when moved to the bottom.
-
-
- int getjoyAB1(void);
-
- This function returns a 1 or true, when the first button on
- the primary joystick is depressed. Otherwise it returns a 0,
- or false, when the function is called.
-
-
- int getjoyAB2(void);
-
- This function returns a 1 or true, when the second button on
- the primary joystick is depressed. Otherwise it returns a 0,
- or false, when the function is called.
-
-
- int getjoyBX(void);
-
- This function is identical to getjoyAX above, except returns
- the X value of the secondary joystick.
-
-
- int getjoyBY(void);
-
- This function is identical to getjoyAY above, except returns
- the Y value of the secondary joystick.
-
-
- int getjoyBB1(void);
-
- This function is identical to getjoyAB1 above, except returns
- a 1, or true, if the first button on the secondary joystick
- is depressed.
-
-
- int getjoyBB2(void);
-
- This function is identical to getjoyAB2 above, except returns
- a 1, or true, if the second button on the secondary joystick
- is depressed.
-
-
- 23
-
-
-
-
-
-
- EXAMPLE C SOURCE WITH JOYSTICK FUNCTIONS
- Written for Mix Power C
-
-
- #include <dos.h>
- #include <bios.h>
- #include <conio.h>
- #include <cesjoy.h>
-
- int x, y, b1, b2, xx, yy, b3, b4;
-
- main()
- {
- clrscrn();
-
- if (joyport() == 0)
- {
- printf("There is NO game port installed\n");
- exit();
- }
- poscurs(19,20);
- cprintf("PC Joy Stick Test, Copyright 1989 C.E.S.");
- poscurs(20,28);
- cprintf("Press any key to exit.");
-
- for(;;)
- {
- x = getjoyAX();
- y = getjoyAY();
- b1 = getjoyAB1();
- b2 = getjoyAB2();
- xx = getjoyBX();
- yy = getjoyBY();
- b3 = getjoyBB1();
- b4 = getjoyBB2();
-
- poscurs(5,10);
- cprintf("Joystick #1. X= %3d", x);
- poscurs(6,10);
- cprintf("Joystick #1. Y= %3d", y);
- poscurs(8,10);
- cprintf("Joystick #1, Button #1= %1d", b1);
- poscurs(9,10);
- cprintf("Joystick #1, Button #2= %1d", b2);
- poscurs(11,10);
- cprintf("Joystick #2. X= %3d", xx);
- poscurs(12,10);
- cprintf("Joystick #2. Y= %3d", yy);
- poscurs(14,10);
- cprintf("Joystick #2, Button #1= %1d", b3);
- poscurs(15,10);
- cprintf("Joystick #2, Button #2= %1d", b4);
- if (kbhit()) break;
- }
-
- clrscrn();
- }
-
-
- 24
-
-
-
-
-
-
- BUG REPORT
-
-
-
- Please fill out the following form to report and bugs. If
- possible, also send a copy of your C source where the bug has
- occurred. I do not think that the library contains any any
- bugs, which may be a bold statement, but it has undergone a
- lot of testing. Please mail the completed for to:
-
- Computer Engineering Services
- P.O. Box 1222
- Show Low, Arizona 85901-1222
-
- ------------------------------------------------------------
-
- Name ______________________________ Phone (___)_____________
-
- Address ___________________________ City ___________________
-
- State ___________ Zip __________ Library Version ___________
-
- Compiler _____________ Version ____________
-
- Describe the bug or malfunction:
-
- ____________________________________________________________
-
- ____________________________________________________________
-
- ____________________________________________________________
-
- ____________________________________________________________
-
- What compiler directives or options were used:
-
- ____________________________________________________________
-
- ____________________________________________________________
-
- What linker options were used:
-
- ____________________________________________________________
-
- ____________________________________________________________
-
- Is your C source code enclosed? ______
-
- Other comments: ____________________________________________
-
- ____________________________________________________________
-
- ____________________________________________________________
-
- ____________________________________________________________
-
-
-
-
- 25
-
-
-
-
-
-
- REGISTRATION AND ORDER FORM
-
-
- Name _______________________________ Phone (___)____________
-
- Address ____________________________ City __________________
-
- State _________ Zip ___________ Bus. Phone (___)____________
-
- SHIPPING ADDRESS ___________________________________________
-
- City _________________________ State _________ Zip _________
-
-
- ------------------------------------------------------------
-
- CESMouse Tools Library With Joystick Functions
-
-
- __ Registration of Shareware Only Version ........... $10.00
-
- __ Registration and Upgrade to Professional Library . $22.50
-
- __ Professional Library Updates ..................... $ 7.50
- (Registered Professional Library Users Only)
-
- __ Three inch Diskette .............................. $ 1.50
- (Default is 5.25 inch 360 K media)
-
-
-
- TOTAL ............................................. ________
-
- __ Personal Check __ Money Order is enclosed.
-
- Please make checks payable to John F. Jarrett, C.E.S.
- ------------------------------------------------------------
- PLEASE NOTE
-
- Personal Checks take two to three weeks to clear. Money
- Orders/Cashiers Checks are shipped immediately. Please allow
- two weeks for delivery for regular mail, which is included in
- the prices above. Should we be out of stock of something, we
- will spend 29 cents and send you a notice and the expected
- shipping date!
-
- When you upgrade to the Professional Library, all of the C
- source for all of the functions is included, plus you get
- all of the additional mouse functions for complete mouse and
- mouse cursor control PLUS a printed manual.
-
- Updates is a service that will send you updates to the
- library for one year. I.E. bug fixes, new routines, etc.
-
-
-
-
-
-
- 26
-
-